<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Account_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    public function validate($email, $pass) {
        $this->db->where('UTILISATEUR_EMAIL', $email);
        $this->db->where('UTILISATEUR_PASSWORD', $pass);

        $query = $this->db->get('UTILISATEUR');
        if ($query->num_rows == 1) {
            $row = $query->row();
            $data = array(
                'email' => $row->UTILISATEUR_EMAIL,
                'id' => $row->UTILISATEUR_ID,
                'valid' => true
            );
            $this->session->set_userdata($data);
            return true;
        }
        return false;
    }

    public function can($right) {
        if (!$this->isPassePartout()) {
            $groups = $this->getGroups();
            $droits = $this->db
                    ->select('allowed')
                    ->from('droit_groupe')
                    ->join('droit', 'droit.droit_id = droit_groupe.droit_id')
                    ->where('droit_libelle', $right)
                    ->where('droit_groupe.allowed', true)
                    ->where_in('droit_groupe.group_id', $groups)
                    ->get()
                    ->result()
            ;
            if (count($droits) > 0)
                return true;
            return false;
        }
        return true;
    }

    private function isPassePartout() {
        $results = $this->db
                ->select('GROUPE_ID')
                ->from('utilisateur_groupe')
                ->where('UTILISATEUR_ID', $this->session->userdata('id'))
                ->get()
                ->result()
        ;

        $passePartout = false;
        foreach ($results as $r) {
            $pp = $this->db
                    ->select('GROUPE_ID')
                    ->from('GROUPE')
                    ->where('PASSE_PARTOUT', true)
                    ->where('GROUPE_ID', $r->GROUPE_ID)
                    ->get()
                    ->result()
            ;
            if (count($pp) > 0)
                $passePartout = true;
        }
        return $passePartout;
    }

    private function getGroups() {
        $results = $this->db
                ->select('GROUPE_ID')
                ->from('utilisateur_groupe')
                ->where('UTILISATEUR_ID', $this->session->userdata('id'))
                ->get()
                ->result()
        ;

        $array = array();
        foreach ($results as $r) {
            array_push($array, $r->GROUPE_ID);
        }

        return $array;
    }

}

?>